package com.blankland.dataanalysis.utls;

import com.blankland.dataanalysis.domain.Menu;

import java.util.ArrayList;
import java.util.List;

/**
 * 根据菜单数据构建菜单树的工具类
 *
 * 所有菜单数据
 *      --->
 * [
 *  {一级菜单},
 *  {一级菜单},
 *  {
 *      一级菜单
 *      children:[
 *                  {二级菜单},
 *                  {二级菜单}
 *               ]
 *  }
 *  ]
 */
public class MenuHelperUtils {

    /**
     * 构建所有菜单数据的树形结构
     * @param menuList
     * @return
     */
    public static List<Menu> buildTree(List<Menu> menuList){
        //1、封装所有返回的list数据
        ArrayList<Menu> trees = new ArrayList<>();
        //2、遍历所有的菜单数据
        for (Menu menu : menuList) {
            //3、找到递归的入口，parentid=0
            if (menu.getParentId() == 0){//parentid = 0 是目录
                trees.add(findChildren(menu,menuList));// 封装子菜单
            }
        }
        return trees;
    }

    /**
     * 查询子节点
     * @param menu
     * @param treeNodes
     * @return
     */
    private static Menu findChildren(Menu menu, List<Menu> treeNodes) {
        //1、为parentid=0的目录，初始化子节点集合
        menu.setChildren(new ArrayList<>());
        //2、遍历所有的菜单数据
        for (Menu it : treeNodes) {
            //3、对比，menu中的id 是否等于 所有菜单中的parentid
            if (menu.getId() == it.getParentId()){
                if (menu.getChildren() ==null){
                    menu.setChildren(new ArrayList<>());
                }
                //4、将找到的数据，添加到集合中
                menu.getChildren().add(findChildren(it,treeNodes));
            }
        }
        return menu;
    }
}
